constraint layout: freeze/thaw on mass ops
authorMatthias Clasen <mclasen@redhat.com>
Sat, 29 Jun 2019 05:06:56 +0000 (05:06 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 30 Jun 2019 23:10:11 +0000 (00:10 +0100)
In measure and allocate we are potentially
changing quite a few constraints. Don't
optimize at every step.

gtk/gtkconstraintlayout.c

index aa5280d8fde542a398a13fe7081d198d7d3b4265..a746491ccbb719456fbe9dcbf9349d5519b85837 100644 (file)
@@ -710,6 +710,7 @@ gtk_constraint_layout_measure (GtkLayoutManager *manager,
     return;
 
   size_constraints = g_ptr_array_new ();
+  gtk_constraint_solver_freeze (solver);
 
   /* We measure each child in the layout and impose restrictions on the
    * minimum and natural size, so we can solve the size of the overall
@@ -763,6 +764,8 @@ gtk_constraint_layout_measure (GtkLayoutManager *manager,
       g_ptr_array_add (size_constraints, constraint);
     }
 
+  gtk_constraint_solver_thaw (solver);
+
   switch (orientation)
     {
     case GTK_ORIENTATION_HORIZONTAL:
@@ -879,6 +882,7 @@ gtk_constraint_layout_allocate (GtkLayoutManager *manager,
                      gtk_constraint_variable_get_value (layout_height)));
 
   size_constraints = g_ptr_array_new ();
+  gtk_constraint_solver_freeze (solver);
 
   /* We reset the constraints on the size of each child, so we are sure the
    * layout is up to date
@@ -931,6 +935,8 @@ gtk_constraint_layout_allocate (GtkLayoutManager *manager,
       g_ptr_array_add (size_constraints, constraint);
     }
 
+  gtk_constraint_solver_thaw (solver);
+
   for (child = _gtk_widget_get_first_child (widget);
        child != NULL;
        child = _gtk_widget_get_next_sibling (child))